package cn.wires.lu.charts.controller;


import cn.wires.lu.charts.entity.FundBaseInfo;
import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
@RequestMapping("/charts")
/**
 * 指定接口中公共的熔断设置
 * 如果在@DefaultProperties 指定了公共的降级方法
 * 在@HystrixCommand 不需要单独指定了
 */
@DefaultProperties(defaultFallback = "defualtFallBack")
public class ChartsController {

    @Autowired
    private RestTemplate restTemplate;

    /**
     * 使用注解配置熔断保护
     * @param id
     * @return
     */
    @HystrixCommand
    @GetMapping(value = "/{id}")
    public FundBaseInfo findById(@PathVariable Integer id){
        return restTemplate.getForObject("http://fund-service/fund/1",FundBaseInfo.class);
    }

    /**
     * 指定统一的降级方法
     */
    public FundBaseInfo defualtFallBack(){
        FundBaseInfo baseInfo=new FundBaseInfo();
        baseInfo.setFundNo("触发统一降级方法");
        return  baseInfo;
    }

    /**
     * 降级方法
     * 和需要受到保护的方法的返回值一致
     */
    public FundBaseInfo fundFallBack(Integer id){
        FundBaseInfo baseInfo=new FundBaseInfo();
        baseInfo.setFundNo("出发降级方法");
        return  baseInfo;
    }


}
